#include "user.h"
#include "link_list.h"
// 初始化用户信息
// 用户表的创建
Link_list_t *init_user_list(void)
{
    // 1 创建 头节点的动态空间
    Link_list_t *user_list = (Link_list_t *)malloc(sizeof(Link_list_t));
    if (NULL == user_list)
    {
        printf("创建失败\n");
        return NULL;
    }

    user_list->next = NULL; // 初始化头结点指针域为 NULL

    return user_list;
}

// 用户表的销毁
void free_user_list(Link_list_t **user_list)
{
    // 1 判断链表是否为空
    if (NULL == *user_list)
    {
        printf("链表 为 NULL\n");
        return;
    }
    // 2 判断链表是否只有一个结点 如果只有一个结点 直接释放头结点
    if (NULL == (*user_list)->next)
    {
        free(*user_list);
        *user_list = NULL;
        return;
    }
    // 3 销毁结点
    Node_t *ptr_1 = (*user_list)->next; // 指向第一个结点
    Node_t *ptr_2 = ptr_1->next;        // 指向第二个结点
    for (size_t i = 0; ptr_1 != NULL; i++)
    {
        free(ptr_1);
        // if 判断  判断 ptr2 = NULL 的时候 我们如何处理
        ptr_1 = ptr_2;
        if (NULL != ptr_2)
        {
            ptr_2 = ptr_2->next;
        }
    }
    // 4 销毁头结点
    free(*user_list);
    *user_list = NULL;
}
// 用户表的遍历
void print_user_list(Link_list_t *user_list)
{
    if (NULL == user_list)
    {
        printf("链表为空\n");
        return;
    }
    if (user_list->next == NULL)
    {
        printf("链表无数据\n");
        return;
    }
    Node_t *ptr = user_list->next; // 指向第一个节点
    while (ptr != NULL)
    {
        printf("用户名:%s 密码:%s \n", ptr->user.id, ptr->user.password);
        ptr = ptr->next;
    }
}
// 用户表的注册
void register_user(Link_list_t *user_list)
{
    // 1 判断链表是否为空
    if (NULL == user_list)
    {
        printf("链表为空\n");
        return;
    }
    // 2 创建新结点
    Node_t *new_node = (Node_t *)malloc(sizeof(Node_t));
    if (NULL == new_node)
    {
        printf("创建失败\n");
        return;
    }
    // 3 输入用户名和密码
    printf("请输入用户名:");
    scanf("%s", new_node->user.id);
    printf("请输入密码:");
    scanf("%s", new_node->user.password);
    new_node->next = NULL;
    // 4 尾插法插入新结点
    if (user_list->next == NULL)
    {
        user_list->next = new_node;
    }
    else
    {
        Node_t *ptr = user_list->next;
        while (ptr->next != NULL)
        {
            ptr = ptr->next;
        }
        ptr->next = new_node; // 将结点链接到尾节点
    }
    printf("注册成功\n");
}
// 用户表的登录
void login_user(Link_list_t *user_list)
{
    // 1 判断链表是否为空
    if (NULL == user_list)
    {
        printf("链表为空\n");
        return;
    }
    if (user_list->next == NULL)
    {
        printf("链表无数据\n");
        return;
    }
    // 2 输入用户名和密码
    char id[20] = {0};
    char password[20] = {0};
    printf("请输入用户名:");
    scanf("%s", id);
    printf("请输入密码:");
    scanf("%s", password);
    // 3 遍历链表
    Node_t *ptr = user_list->next;
    while (ptr != NULL)
    {
        if (strcmp(ptr->user.id, id) == 0 && strcmp(ptr->user.password, password) == 0)
        {
            if (ptr->user.flag == 1)
            {
                printf("管理员登录成功\n");
                return;
            }
            printf("登录成功\n");
            return;
        }
        ptr = ptr->next;
    }
    printf("登录失败\n");
}

// 用户表的修改
void modify_user_name(Link_list_t *user_list)
{
    // 1 判断链表是否为空
    if (NULL == user_list)
    {
        printf("链表为空\n");
        return;
    }
    if (user_list->next == NULL)
    {
        printf("链表无数据\n");
        return;
    }
    // 2 输入用户名和密码
    char id[20] = {0};
    char password[20] = {0};
    printf("请输入用户名:");
    scanf("%s", id);
    printf("请输入密码:");
    scanf("%s", password);
    // 3 遍历链表
    Node_t *ptr = user_list->next;
    while (ptr != NULL)
    {
        if (strcmp(ptr->user.id, id) == 0 && strcmp(ptr->user.password, password) == 0)
        {
            printf("请输入新的密码:");
            scanf("%s", ptr->user.password); // 修改密码
            printf("修改成功\n");
            return;
        }
        ptr = ptr->next;
    }
    printf("修改失败\n");
}